﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.Net.Mime;
using BusinessLayer.BO;
using BusinessLayer.Facade;
using BusinessLayer.Interface;
using System.Text;
using EntityLayer;
namespace PresentationLayer
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        clsIFacadeAsignacionAbogado objAsignarAbogado;
                private IEnumerable<Object> lista = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CargarEstados();
                CargarGrid();
            }
        }

        protected void btnAsignarAbogado_Click(object sender, EventArgs e)
        {

            objAsignarAbogado = new clsFacadeAsignarAbogado();
            String nu_Resolucion = dgDocumentos.GetRowValues(dgDocumentos.FocusedRowIndex, "NU_Prelegajo").ToString();
            if (!objAsignarAbogado.VerificaAsignacion(nu_Resolucion))
            {
                MostrarComentario("EL prelegajo ya tiene un abogado asignado");
                return;
            }
            CargarAbogadoAsig();
          
        }

        private void MostrarComentario(String msg, String titulo = "Mensaje")
        {
            lblMensaje.Text = msg;
            pcMensaje.HeaderText = titulo;
            pcMensaje.ShowOnPageLoad = true;
        }

      private  string CorreoAbogado()
        {
            objAsignarAbogado = new clsFacadeAsignarAbogado();
            string correo = "";
            var query = from p in objAsignarAbogado.ListarAbogados()
                                   where p.CO_persona == cboAbogadoAsig.Value.ToString()
                                   select p;

            foreach (var item in query)
            {
                 correo = item.tx_Correo;
            }
            if (correo==null)
            {
                correo = "";
            }
            return correo;
        }
        int AsignarAbogado()
        {
            int retur = 0;

            try
            {
                //if (cboAbogadoAsig.SelectedItem == null) { MostrarComentario("Debe seleccionar un Abogado a asignar."); return; }
                //if (cboAbogadoAsig.SelectedItem.Value.ToString() == "0") { MostrarComentario("Debe seleccionar un Abogado a asignar."); return; }

                
                int index = dgDocumentos.FocusedRowIndex;
                String nu_Resolucion = dgDocumentos.GetRowValues(index, "NU_Prelegajo").ToString();
                String co_Abogado = cboAbogadoAsig.SelectedItem.Value.ToString();

                objAsignarAbogado = new clsFacadeAsignarAbogado();
                if (objAsignarAbogado.AsignarAbogado(nu_Resolucion, co_Abogado,(DateTime) dtpFechaAsignacion.Value))
                {
                    CargarGrid();
                    MostrarComentario("Abogado Asignado a Pre-Legajo");

                    retur = 1;
                }
                else
                {
                    MostrarComentario("Error al asignar abogado");
                    retur = 0;
                }
            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "Error");
            }
            return retur;
        }

       bool  Enviar_Correo(string correo)
{
    try
    {
        String cuerpo="";
        cuerpo = txtMensajeCorreo.Text;
        //Configuración del Mensaje 
        MailMessage mail = new MailMessage();
        SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
        //Especificamos el correo desde el que se enviará el Email y el nombre de la persona que lo envía
        mail.From = new MailAddress("procuraduriap@gmail.com", "Procuraduria", Encoding.UTF8);
        //Aquí ponemos el asunto del correo
        mail.Subject = "Asignacion de Prelegajo. Fecha Asignacion : " + dtpFechaAsignacion.Text;
        //Aquí ponemos el mensaje que incluirá el correo
        mail.Body = cuerpo;
        //Especificamos a quien enviaremos el Email, no es necesario que sea Gmail, puede ser cualquier otro proveedor
        mail.To.Add(correo);
        //si queremos agregar con copia a alguien mas
      //  mail.CC.Add("");
        //Si queremos enviar archivos adjuntos tenemos que especificar la ruta en donde se encuentran
       // Attachment Data = new Attachment(archivo, MediaTypeNames.Image.Jpeg);
        //Obtengo las propiedades del archivo.
        //ContentDisposition disposition = Data.ContentDisposition;
        //disposition.CreationDate = System.IO.File.GetCreationTime(archivo);
        //disposition.ModificationDate = System.IO.File.GetLastWriteTime(archivo);
        //disposition.ReadDate = System.IO.File.GetLastAccessTime(archivo);

      //  mail.Attachments.Add(Data);

        //Configuracion del SMTP
        SmtpServer.Port = 25; //Puerto que utiliza Gmail para sus servicios
        //Especificamos las credenciales con las que enviaremos el mail
        SmtpServer.Credentials = new System.Net.NetworkCredential("procuraduriap@gmail.com", "procuraduri4");
        SmtpServer.EnableSsl = true;
        SmtpServer.Send(mail);
        mail.Dispose();
        SmtpServer.Dispose();
        return true;



     }
    catch (Exception)
    {
        return false;

    }
}
        

        private void CargarAbogadoAsig()
        {
            try
            {
                cboAbogadoAsig.SelectedIndex = -1;

                lista = new List<Object>();
                objAsignarAbogado = new clsFacadeAsignarAbogado();
                lista = objAsignarAbogado.ListarAbogados();

                if (lista == null || lista.Count() == 0) { MostrarComentario("No hay Abogados a Asignar."); return; }

                cboAbogadoAsig.DataSource = lista;
                cboAbogadoAsig.ValueField = "CO_persona";
                cboAbogadoAsig.TextField = "VR_nombrepersona";
                cboAbogadoAsig.DataBind();

                pcAsignar.ShowOnPageLoad = true;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "Error");
            }
        }

        private void CargarGrid()
        {
            try
            {
                lista = new List<V_legajos>();
                objAsignarAbogado = new clsFacadeAsignarAbogado();
                //var Query = from p in objAsignarAbogado.listarPreLegajoAbogado()
                //            where p.Estado == cboEstado.SelectedItem.Text
                //            select p;
                lista = objAsignarAbogado.listarPreLegajoAbogado();
                 dgDocumentos.DataSource = lista;
                dgDocumentos.DataBind();
            }
            catch (Exception ex)
            {

                MostrarComentario(ex.Message, "Error");
            }

        }

        protected void dgDocumentos_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            CargarGrid();
        }

        protected void dgDocumentos_HeaderFilterFillItems(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewHeaderFilterEventArgs e)
        {
            CargarGrid();
        }

        protected void dgDocumentos_PageIndexChanged(object sender, EventArgs e)
        {
            CargarGrid();
        }

        protected void btnAsignar_Click(object sender, EventArgs e)
        {
            try
            {
                
                
                if (dtpFechaAsignacion.Date < DateTime.Now.Date)
                {
                    MostrarComentario("La fecha de asignación debe ser mayor que la fecha actual");
                    return;
                }
                if (cboAbogadoAsig.Text == "" && dtpFechaAsignacion.Text == "")
                {
                    Link_cboAbogado.Visible = true;
                    Link_Fecha.Visible = true;
                }
                else
                {
                    if (cboAbogadoAsig.Text == "")
                    {
                        Link_cboAbogado.Visible = true;
                    }
                    else
                    {
                        Link_cboAbogado.Visible = false;
                        if (dtpFechaAsignacion.Text == "")
                        {
                            Link_Fecha.Visible = true;
                        }
                        else
                        {
                            Link_cboAbogado.Visible = false;
                            Link_Fecha.Visible = false;

                            if (CorreoAbogado().Length == 0)
                            {
                                MostrarComentario("Abogado no tiene Correo");
                                return;
                            }

                            int i = AsignarAbogado();

                            if (Enviar_Correo(CorreoAbogado()))
                            {
                                MostrarComentario("Correo Enviado Correctamente", "Correo");
                                lbl_msj.Visible = true;
                                lbl_msj.Text = "Abogado Asignado a Pre-Legajo //";

                                lbl_correo.Visible = true;
                                lbl_correo.Text = "[Correo Enviado Correctamente]";
                                lbl_correo.ForeColor = Color.Blue;
                            }
                            else
                            {
                                MostrarComentario("Error: Al enviar correo. Revise su conexion de Internet", "Correo");
                                lbl_msj.Visible = true;
                                lbl_msj.Text = "Abogado Asignado a Pre-Legajo //";

                                lbl_correo.Visible = true;
                                lbl_correo.Text = "[Fallo en el envío del Correo]";
                                lbl_correo.ForeColor = Color.Red;
                            }

                        }
                    }
                }
            }
            catch (Exception)
            {
                Link_cboAbogado.Visible = true;
            }
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
             Session["op"]="C";
             int index = dgDocumentos.FocusedRowIndex;
             Session["nroResol"] = dgDocumentos.GetRowValues(index, "NU_Prelegajo").ToString();
             Response.Redirect("wfrmPreLegajoJudicialActualizar.aspx", true);
        }

        protected void cboEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            CargarGrid();
        }

        private void CargarEstados()
        {
            try
            {
                cboEstado.SelectedIndex = -1;

                lista = new List<Object>();
                objAsignarAbogado = new clsFacadeAsignarAbogado();
                lista = objAsignarAbogado.ListatEstados();

                if (lista == null || lista.Count() == 0) { MostrarComentario("No hay Abogados a Asignar."); return; }

                cboEstado.DataSource = lista;
                cboEstado.ValueField = "CO_estado";
                cboEstado.TextField = "VR_estado";
                cboEstado.DataBind();
                cboEstado.SelectedIndex = 0;
             }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "Error");
            }
        }

        protected void cboAbogadoAsig_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboAbogadoAsig.Text != "")
            {
                Link_cboAbogado.Visible = false;
            }
        }

        protected void dtpFechaAsignacion_DateChanged(object sender, EventArgs e)
        {
            try
            {
                if (dtpFechaAsignacion.Text == "")
                {
                    Link_Fecha.Visible = true;
                }
                else
                {
                    Link_Fecha.Visible = false;
                }
            }
            catch (Exception)
            {
                
                throw;
            }   
        }
    }
}